/*
 *
 * 名称：方案
 * 功能：奇门遁甲断局方案配置
 * 作者：清河张
 * 时间：2025.05.11
 *
 */

#ifndef FANGAN_H
#define FANGAN_H

#include "base/lifa.h"
#include "base/bazi.h"
#include "qmgong9.h"
#include <QByteArray>
#include <map>
#include <QJsonObject>

namespace QMDJ {

class FANGAN
{
public:
    struct YONGSHEN//用神
    {
        unsigned _paifu : 16; //牌符
        unsigned _buluo : 16; //部落
        int _bianhao; //编号
        QByteArray _ming;//大名
        QByteArray _nengji;//能级
        QByteArray _bianzhi;//编制
        QByteArray _jixing;//击刑
        QByteArray _kongwang;//空亡
        QByteArray _menpo;//门迫
        QByteArray _rumu;//入墓
        QByteArray _xiangyi;//象意
        QMGONG9::GONG* _lg;//落宫
    };
    typedef std::map<unsigned, YONGSHEN> YSMAP;//用神表

    //初始化关联到九宫
    FANGAN(QMGONG9&);
    //依方案断局
    const QByteArray& duan(LIFA sr);
    //删除方案
    void remove(qint64);
    //加载指定方案
    bool load(qint64);
    //加载方案
    bool load();
    //保存json
    bool store(const QJsonObject&);
    //穿透获取json对象
    const QJsonObject& jsonObj();
    //获取九宫
    QMGONG9& gong9();
    //获取用神列表
    const YSMAP& ysmap() const;
    //获取指定用神
    const YONGSHEN* ys(unsigned) const;

private:

    void setys();

    QString _confgfile;
    QMGONG9& _gong9;
    QJsonObject _jsonObj;
    QByteArray _duanstr;
    YSMAP _ysmap;//用神表
};

};

#endif // FANGAN_H
